using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
private static void doPython()
{
ScriptEngine engine = Python.CreateEngine();
engine.ExecuteFile(@"test.py");
}
//You can get IronPython here : https://ironpython.net/
private void run_cmd(string cmd, string args)
{
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = "my/full/path/to/python.exe";
start.Arguments = string.Format("{0} {1}", cmd, args);
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
using(Process process = Process.Start(start))
{
using(StreamReader reader = process.StandardOutput)
{
string result = reader.ReadToEnd();
Console.Write(result);
}
}
}
"""
It is actually pretty easy. Just use NuGet to add the "UnmanagedExports" package
to your .Net project.
See https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports for details.
"""
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using RGiesecke.DllExport;
class Test
{
[DllExport("add", CallingConvention = CallingConvention.Cdecl)]
public static int TestExport(int left, int right)
{
return left + right;
}
}
"""
You can then load the dll and call the exposed methods in Python (works for 2.7)
"""
import ctypes
a = ctypes.cdll.LoadLibrary(source)
a.add(3, 5)
string strCmdText;
string file;
file = "py.py"
strCmdText= "python3" + file;
System.Diagnostics.Process.Start("CMD.exe",strCmdText);